From b2f076d699c0ca709d8d6119c2f31dad39e975ec Mon Sep 17 00:00:00 2001 From: Tim Starling Date: Wed, 26 Jul 2006 14:13:07 +0000 Subject: [PATCH] Experimental FSS support --- languages/LanguageConverter.php | 44 ++++++++++++++++++++++++++++++--- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/languages/LanguageConverter.php b/languages/LanguageConverter.php index daf1534117..d0c9d60ae8 100644 --- a/languages/LanguageConverter.php +++ b/languages/LanguageConverter.php @@ -12,7 +12,9 @@ class LanguageConverter { var $mMainLanguageCode; var $mVariants, $mVariantFallbacks; var $mTablesLoaded = false; + var $mUseFss = false; var $mTables; + var $mFssObjects; var $mTitleDisplay=''; var $mDoTitleConvert=true, $mDoContentConvert=true; var $mCacheKey; @@ -46,6 +48,9 @@ class LanguageConverter { $this->mMarkup = array_merge($m, $markup); $f = array('A'=>'A', 'T'=>'T'); $this->mFlags = array_merge($f, $flags); + if ( function_exists( 'fss_prep_replace' ) ) { + $this->mUseFss = true; + } } /** @@ -158,17 +163,35 @@ class LanguageConverter { $m = array_shift($matches); - $ret = strtr($m[0], $this->mTables[$toVariant]); + $ret = $this->translate($m[0], $toVariant); $mstart = $m[1]+strlen($m[0]); foreach($matches as $m) { $ret .= substr($text, $mstart, $m[1]-$mstart); - $ret .= strtr($m[0], $this->mTables[$toVariant]); + $ret .= $this->translate($m[0], $toVariant); $mstart = $m[1] + strlen($m[0]); } wfProfileOut( $fname ); return $ret; } + /** + * Translate a string to a variant + * Doesn't process markup or do any of that other stuff, for that use convert() + * + * @param string $text Text to convert + * @param string $variant Variant language code + * @return string Translated text + */ + function translate( $text, $variant ) { + if( !$this->mTablesLoaded ) + $this->loadTables(); + if ( $this->mUseFss ) { + return fss_exec_replace( $this->mFssObjects[$variant], $text ); + } else { + return strtr( $text, $this->mTables[$variant] ); + } + } + /** * convert text to all supported variants * @@ -184,7 +207,7 @@ class LanguageConverter { $ret = array(); foreach($this->mVariants as $variant) { - $ret[$variant] = strtr($text, $this->mTables[$variant]); + $ret[$variant] = $this->translate($text, $variant); } wfProfileOut( $fname ); return $ret; @@ -334,6 +357,9 @@ class LanguageConverter { } } + if ( $this->mUseFss ) { + $this->generateFssObjects(); + } } } else { @@ -498,6 +524,18 @@ class LanguageConverter { $wgMemc->set($this->mCacheKey, $this->mTables, 43200); $this->unlockCache(); } + if ( $this->mUseFss ) { + $this->generateFssObjects(); + } + } + + /** + * Generate FSS objects. The FSS extension must be available. + */ + function generateFssObjects() { + foreach ( $this->mTables as $variant => $table ) { + $this->mFssObjects[$variant] = fss_prep_replace( $table ); + } } /** -- 2.20.1